// 目标：利用栈的先进后出特性反转字符串
// TODO: 补全 push 和 pop 逻辑
struct Stack<T> {
    data: Vec<T>,
}

impl<T> Stack<T> {
    fn new() -> Self {
        Stack { data: Vec::new() }
    }

    fn push(&mut self, item: T) {
        // 你的代码
    }

    fn pop(&mut self) -> Option<T> {
        // 你的代码
    }
}

fn reverse_string(input: &str) -> String {
    let mut stack = Stack::new();
    for c in input.chars() {
        stack.push(c);
    }
    let mut reversed = String::new();
    while let Some(c) = stack.pop() {
        reversed.push(c);
    }
    reversed
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_reverse() {
        assert_eq!(reverse_string("hello"), "olleh");
    }
}

// 新增 main 函数用于演示
fn main() {
    let test_str = "rustseek2";
    println!("Original: {}", test_str);
    println!("Reversed: {}", reverse_string(test_str));
}
